package com.irssproject.app.service.recommendations.iface;

import com.irssproject.app.entitats.Topic;
import java.util.List;

import com.irssproject.app.entitats.Feed;
import com.irssproject.app.entitats.Item;
import com.irssproject.app.entitats.Subscription;
import com.irssproject.app.entitats.User;
import com.irssproject.app.entitats.recommendations.UserClustersRecommendation;

public interface RecommendationsService {

    public List<User> getNeighbors(User usuari) throws Exception;

    public void refreshSubscripcio(Subscription subscripcio);

    public void insertPersonalizedLabel(Subscription subscripcio, String etiquetaPersonalitzada, String concepte);

    public List<UserClustersRecommendation> getTopClusters(User user);

    public List<Item> getTopItemsByTopic(User user, Long id);

    public List<Item> getTopItemsByTopic(User user, String topic);

    public List<Feed> getTopFeeds(User user);

    public List<Item> getTopItemsByFeed(User user, Long idFeed);

    public List<Item> getPersItemsByCluster(Long conceptId, Long userId);

    public List<UserClustersRecommendation> getMatchingClusters(User connectedUser, User recommendedUser);

    public List<UserClustersRecommendation> getClusters(User connectedUser) throws Exception;

    public List<Item> fillPersItemsByCluster(Long conceptId, Long userId, String[] items);

    public List<Item> fillTopItemsByCluster(User user, Long conceptId, String[] items);

    public void createUserSubscription(User user, User userToSubs) throws Exception ;
    
    public void createTopicSubscription(User user, Long tId) throws Exception ;

    public void createTopicSubscription(User user, String tName) throws Exception ;

    public List<Item> getTopItems(User user);

    public List<Item> fillTopItems(User connectedUser, String[] items);

    public List<Item> fillTopItemsByFeed(User connectedUser, Long feedId, String[] items);

    public List<User> fillNeighbors(User connectedUser, String[] usrs) throws Exception;

    public List<UserClustersRecommendation> fillMatchingClusters(User connectedUser, User recommendedUser, String[] recommendedTopics);

    public List<UserClustersRecommendation> fillClusters(User connectedUser, String[] items) throws Exception;

}
